Разница между NgForm, FormGroup, и FormControl?
Разница между NgForm, FormGroup и FormControl в Angular заключается в их функциональности и использовании. Давайте рассмотрим каждый из них подробнее:
-
NgForm:NgFormпредставляет форму в Angular и предоставляет функциональность для управления состоянием формы, валидации и отправки данных. Он автоматически создается при использовании директивыngFormв шаблоне и ассоциируется с HTML-элементом<form>.Пример использования
NgForm:<form #myForm="ngForm" (ngSubmit)="submitForm(myForm)"> <input type="text" name="name" [(ngModel)]="user.name" required /> <button type="submit">Отправить</button> </form>В примере выше,
NgFormсоздается с помощью директивыngFormи ассоциируется с элементом<form>с помощью#myForm="ngForm". Мы также прослушиваем событие(ngSubmit)для обработки отправки формы.NgFormавтоматически управляет состоянием полей ввода и валидацией. -
FormGroup:FormGroupпредставляет группу контролов формы в Angular. Он используется для организации связанных полей ввода вместе и предоставляет функциональность для управления состоянием и валидацией группы контролов.Пример использования
FormGroup:import { Component, OnInit } from '@angular/core' import { FormGroup, FormControl, Validators } from '@angular/forms' @Component({ selector: 'app-my-form', templateUrl: './my-form.component.html' }) export class MyFormComponent implements OnInit { myForm: FormGroup ngOnInit() { this.myForm = new FormGroup({ name: new FormControl('', Validators.required), email: new FormControl('', [Validators.required, Validators.email]) }) } submitForm() { if (this.myForm.valid) { // Отправить данные формы } } }В этом примере мы создаем экземпляр
FormGroupв методеngOnInit(). Каждый контрол формы представлен экземпляромFormControl, который может иметь свои валидаторы. Мы также добавляем валидаторы для поляemailв массиве[Validators.required, Validators.email]. При отправке формы мы проверяемthis.myForm.valid, чтобы убедиться, что все поля формы прошли валидацию. -
FormControl:FormControlпредставляет отдельное поле ввода в Angular. Он предоставляет функциональность для управления состоянием и валидацией конкретного поля ввода.Пример использования
FormControl:import { Component } from '@angular/core' import { FormControl, Validators } from '@angular/forms' @Component({ selector: 'app-my-input', templateUrl: './my-input.component.html' }) export class MyInputComponent { nameControl: FormControl = new FormControl('', Validators.required) }В этом примере мы создаем экземпляр
FormControlдля поля ввода имени. Мы также добавляем валидаторValidators.requiredдля обязательного заполнения поля. ЭкземплярFormControlможет быть связан с полем ввода с помощью директивыformControlв шаблоне.
В итоге, NgForm, FormGroup и FormControl представляют разные уровни абстракции для работы с формами в Angular. NgForm используется для представления всей формы и управления ее состоянием, в то время как FormGroup используется для организации группы связанных полей ввода. FormControl представляет отдельное поле ввода и предоставляет функциональность для управления его состоянием и валидацией. Выбор между ними зависит от сложности вашей формы и требований вашего приложения.